stridani barev v gridu

Otázka od: Aleš Kerner

20. 11. 2002 14:10

Zdravim

nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn. aby
byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost
dlouho a nemuzu s tim hnout.

Pokud nekdo mate, prosil bych i priklad.

Dik Ales



---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.419 / Virová báze: 235 - datum vydání: 13.11.2002

Odpovedá: David Michal

20. 11. 2002 14:26

Zdravim,
Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji stridat
tyto tri barvy?
V prvnim pripade vim a je to i v archivu konference, v druhem pripadu nevim.
David

nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn. aby
byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost
dlouho a nemuzu s tim hnout.


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002

Odpovedá: Aleš Kerner

20. 11. 2002 15:01

samo, ze k aktualne zobrazovanym datum



> Zdravim,
> Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji
stridat
> tyto tri barvy?
> V prvnim pripade vim a je to i v archivu konference, v druhem pripadu
nevim.
> David
>
> nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn.
aby
> byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost
> dlouho a nemuzu s tim hnout.

Odpovedá: Ondrej Kelle

20. 11. 2002 15:13

> nevite prosim Vas nekdo, jak udelat stridani barev v gridu u
> radku, tzn. aby byl treba 1 radek bily a 2. sedivy a 3. zase
> bily, uz se stim morim dost dlouho a nemuzu s tim hnout.

Nepises, o aky grid sa jedna.
V pripade stringgridu si mozes napisat OnDrawCell napriklad takto
(DefaultDrawing je True):

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
const
  RowColors: array[Boolean] of TColor = (clCream, clMoneyGreen);
begin
  with Sender as TStringGrid do
  begin
    if not (gdFixed in State) and ((gdFocused in State) or not (gdSelected
in State)) then
    begin
      Canvas.Brush.Color := RowColors[(ARow - FixedRows) mod 2 = 0];
      Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
    end;
  end;
end;

HTH
TOndrej

Odpovedá: Karel Horky

20. 11. 2002 15:50

  Aleš Kerner, <mailto:kerner@metalcom.cz> napsal:
AK> nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn.
aby
AK> byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost

Ahoj, priklad viz nize, podobne ale najdes i v knize Delphi 1001 t&t
(priklad 822, 823). Tady se ti budou stridat zelena a cervena. Jen si
musis zjistit, jestli pri vykreslovani jsi na sudem nebo lichem radku :

Obsluha udalosti OnDrawColumnCell

procedure TUkaz.gridUkazDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
  
  function StojimNaSudemRadku: Boolean
  begin
    { nejaka funkce na zjisteni sudeho radku }
    Result := (SudyRadek);
  end;
begin
  {spusti se s vykreslenim kazdeho sloupce }
  with Sender as TDBGrid do begin
        if StojimNaSudemRadku then
          if gdSelected in State then begin
            Canvas.Brush.Color := clHighLight;
            Canvas.Font.Color := clLime;
          end
          else begin
            Canvas.Brush.Color := clLime ;
            Canvas.Font.Color := clInfoText;
          end
        else
          if gdSelected in State then begin
            Canvas.Brush.Color := clHighLight;
            Canvas.Font.Color := clRed;
          end
          else begin
            Canvas.Brush.Color := clRed ;
            Canvas.Font.Color := clInfoText;
          end;
      end;
    end;
  gridUkaz.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

------
S pozdravem Karel Horky
horky.karel@quick.cz
W2K/SP2, D5Ent/UP1

Odpovedá: David Michal

20. 11. 2002 15:49

Zdravim,
Pak jak jsem psal, vse je v archivu konference. viz. www.delphi.cz .
Ale presto hodim priklad:

Nejdrive si vlastnost DefaultDrawing u DBGridu prepnete na False.
Pak je treba obslouzit udalost: OnDrawColumnCell u DBGridu. Napr.

procedure TFrm_Main.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin

 //pokud bude field Locked True pak se zaznam zobrazi s cervenym fontem
 if DBGrid1.DataSource.DataSet.FieldByName('Locked').AsBoolean then
   DBGrid1.Canvas.Font.Color := clRed;

//pokud by jste chtel vybarvit pozadi a ne font pak tam bude Brush misto
Font, spoustu dalsich moznosti najdete v napovede pod TCanvas

 //nezapomenout zavolat puvodni funkci
 DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);

end;

samo, ze k aktualne zobrazovanym datum



> Zdravim,
> Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji
stridat
> tyto tri barvy?

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002

Odpovedá: Robert Suska

20. 11. 2002 16:02

Ahoj !

Pouzi RXLib a z nej TRxDBGrid a ja som to robil nasledovnym kodom a tam sa
mi farby striedaju podla nejakych hodnot vo fieldoch

procedure TZmluvyDataForm.RxDBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var G: TDBGrid;
begin
 inherited;
 G:= Sender as TDBGrid;
 if(DataModule2.ZmluvyTable1.

FieldByName('DOBA_PLATNOSTI_ZMLUVY').AsDateTime<NOW)
  then
   begin
    if (gdSelected in State ) and (G.focused = TRUE) then
     begin
      G.Canvas.BRUSH.Color := clRed;
      G.Canvas.Font.Color := clWhite;
     end
    else
     G.Canvas.Font.Color := clRed;
    G.DefaultDrawColumnCell(Rect, DataCol, Column, State);
   end;
 if(DateToStr(DataModule2.ZmluvyTable1.FieldByName('DOBA_PLATNOSTI_ZMLUVY').

AsDateTime)=DateToStr(NOW))
  then
   begin
    if (gdSelected in State ) and (G.focused = TRUE) then
     begin
      G.Canvas.BRUSH.Color := clGreen;
      G.Canvas.Font.Color := clWhite;
     end
    else
     G.Canvas.Font.Color := clGreen;
    G.DefaultDrawColumnCell(Rect, DataCol, Column, State);
   end;

if(DataModule2.ZmluvyTable1.FieldByName('ZMLUVA_DO_NEURCITA').AsBoolean=True
)
  then
   begin
    if (gdSelected in State ) and (G.focused = TRUE) then
     begin
      G.Canvas.BRUSH.Color := clBlue;
      G.Canvas.Font.Color := clWhite;
     end
    else
     G.Canvas.Font.Color := clBlue;
    G.DefaultDrawColumnCell(Rect, DataCol, Column, State);
   end;
end;

Ak som uplne mimo tak prosim za prepacenie

S pozdravom,

************************************
Robert Suska
KORAK SLOVAKIA s.r.o.
Horna 52
974 01 Banska Bystrica
www.korak.sk robert@korak.sk
Network administrator, Delphi programmer
************************************

> Zdravim,
> Pak jak jsem psal, vse je v archivu konference. viz. www.delphi.cz .
> Ale presto hodim priklad:
>
> Nejdrive si vlastnost DefaultDrawing u DBGridu prepnete na False.
> Pak je treba obslouzit udalost: OnDrawColumnCell u DBGridu. Napr.
>
> procedure TFrm_Main.DBGrid1DrawColumnCell(Sender: TObject;
> const Rect: TRect; DataCol: Integer; Column: TColumn;
> State: TGridDrawState);
> begin
>
> //pokud bude field Locked True pak se zaznam zobrazi s cervenym fontem
> if DBGrid1.DataSource.DataSet.FieldByName('Locked').AsBoolean then
> DBGrid1.Canvas.Font.Color := clRed;
>
> //pokud by jste chtel vybarvit pozadi a ne font pak tam bude Brush misto
> Font, spoustu dalsich moznosti najdete v napovede pod TCanvas
>
> //nezapomenout zavolat puvodni funkci
> DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
>
> end;
>
> samo, ze k aktualne zobrazovanym datum
>
>
>
> > Zdravim,
> > Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji
> stridat
> > tyto tri barvy?
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002

Odpovedá: Aleš Kerner

20. 11. 2002 15:52


> musis zjistit, jestli pri vykreslovani jsi na sudem nebo lichem radku :
-- tohle vim, ale jak zjistim ten sudy nebo lichy radek, neni problem
vymyslet stridani barev, ale zjistovani radku

delal jsem to takhle, (((Rect.Top div (Rect.Bottom - Rect.Top + 1)) mod 2) =
0), ale je problem,
pokud se posunuji sipkou dolu, tak posledni radek je vzdy sudy¨(lichy) a
stridani je v pr....

Pri page up a page down to docela funguje


>
> Obsluha udalosti OnDrawColumnCell
>
> procedure TUkaz.gridUkazDrawColumnCell(Sender: TObject;
> const Rect: TRect; DataCol: Integer; Column: TColumn;
> State: TGridDrawState);
>
> function StojimNaSudemRadku: Boolean
> begin
> { nejaka funkce na zjisteni sudeho radku }
> Result := (SudyRadek);
> end;
> begin
> {spusti se s vykreslenim kazdeho sloupce }
> with Sender as TDBGrid do begin
> if StojimNaSudemRadku then
> if gdSelected in State then begin
> Canvas.Brush.Color := clHighLight;
> Canvas.Font.Color := clLime;
> end
> else begin
> Canvas.Brush.Color := clLime ;
> Canvas.Font.Color := clInfoText;
> end
> else
> if gdSelected in State then begin
> Canvas.Brush.Color := clHighLight;
> Canvas.Font.Color := clRed;
> end
> else begin
> Canvas.Brush.Color := clRed ;
> Canvas.Font.Color := clInfoText;
> end;
> end;
> end;
> gridUkaz.DefaultDrawColumnCell(Rect, DataCol, Column, State);
> end;
>
> ------
> S pozdravem Karel Horky
> horky.karel@quick.cz
> W2K/SP2, D5Ent/UP1
>

Odpovedá: Karel Horky

21. 11. 2002 8:18

  Aleš Kerner, <mailto:kerner@metalcom.cz> napsal:

>> musis zjistit, jestli pri vykreslovani jsi na sudem nebo lichem radku :
AK> -- tohle vim, ale jak zjistim ten sudy nebo lichy radek, neni problem
AK> vymyslet stridani barev, ale zjistovani radku

Opravdu nepises, v jakem Gridu, napr. ve StringGridu mas vlastnost
Row, ta muze poslouzit.
Dalsi moznosti je mit nejakou posloupnost primo v datech, kdyz uz tam
chces mit stridani barev.

------
S pozdravem Karel Horky
horky.karel@quick.cz
W2K/SP2, D5Ent/UP1

Odpovedá: ing. Jan Fiala

21. 11. 2002 8:50

Staci iDBGrid pretypovat na TStringGrid a pak budou k dispozici Row a
Col udaje
TStringGrid(DBGrid).Row

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

> Aleš Kerner, <mailto:kerner@metalcom.cz> napsal:
>> -- tohle vim, ale jak zjistim ten sudy nebo lichy radek, neni problem
>> vymyslet stridani barev, ale zjistovani radku

Odpovedá: Petr Palicka

21. 11. 2002 10:37

> .....ale jak zjistim ten sudy nebo lichy radek.....

pokud se jedna o TDBGrid, tak by melo jit pouzit
  x:=DBGrid1.DataSource.DataSet.RecNo;
v x by mohlo byt   cislo vety v tabulce, pokud ti
jde o to, aby liche vety v DBGridu meli jinou barvu,
nez sude.

peca

Odpovedá: Martin Schayna

21. 11. 2002 11:40

----- Original Message -----
From: "ing. Jan Fiala" <jan.fiala@iol.cz>
> Staci iDBGrid pretypovat na TStringGrid a pak budou k dispozici Row a
> Col udaje
> TStringGrid(DBGrid).Row

To je zajimava myslenka.

U me v D5 je to takhle:
TStringGrid ma predky --> TDrawGrid --> TCustomGrid
TDBGrid ma predky --> TCustomGrid

Property Row je deklarovana na TCustomGridu v sekci protected,
na TDrawGridu je zverejnena v public bez uprav. Takze kod
TStringGrid(TDBGrid).Row bude fungovat, ale pouze tehdy pokud
se v nejake pristi verzi nezmeni deklarace property Row v tride
TDrawGrid nebo TStringGrid.

Spravnejsi by podle me bylo zadeklarovat vlastniho potomka
TCustomGridu pouze pro zverejneni Row:

type
  TFakeCustomGrid = class(TCustomGrid)
  public
    property Row;
  end;

a pak pouzit TFakeCustomGrid(TDBGrid).Row

Martin Schayna

Odpovedá: Ondrej Kelle

21. 11. 2002 11:34

> Spravnejsi by podle me bylo zadeklarovat vlastniho potomka
> TCustomGridu pouze pro zverejneni Row:
>
> type
> TFakeCustomGrid = class(TCustomGrid)
> public
> property Row;
> end;
>
> a pak pouzit TFakeCustomGrid(TDBGrid).Row

Nie je potrebne nic zverejnovat, staci

type
  TFakeCustomGrid = class(TCustomGrid);

a mas pristup k protected sekcii TCustomGrid.

TOndrej